package me.zhangyifeng.blog.mapper.custom;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import me.zhangyifeng.blog.model.domain.Activity;
import me.zhangyifeng.blog.model.domain.User;
import me.zhangyifeng.blog.model.domain.UserActivity;

/**
 * 活动数据访问接口
 * 
 * @author zhangyifeng
 */
public interface ActivityMapperCustom {
    
    /**
     * 查询所有活动
     * 
     * @return 活动列表
     */
    List<Activity> findAllActivities();
    
    /**
     * 根据ID查询活动
     * 
     * @param activityId 活动ID
     * @return 活动信息
     */
    Activity findActivityById(Integer activityId);
    
    /**
     * 查询活动的参与人数
     * 
     * @param activityId 活动ID
     * @return 参与人数
     */
    Integer countParticipants(Integer activityId);
    
    /**
     * 查询用户是否参与活动
     * 
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return 大于0表示已参与
     */
    Integer checkUserParticipation(@Param("userId") Integer userId, @Param("activityId") Integer activityId);
    
    /**
     * 查询活动的所有参与者
     * 
     * @param activityId 活动ID
     * @return 参与用户列表
     */
    List<User> findParticipantsByActivityId(Integer activityId);
    
    /**
     * 插入用户参与活动记录
     * 
     * @param userActivity 用户活动关系
     */
    void insertUserActivity(UserActivity userActivity);
    
    /**
     * 删除用户参与活动记录
     * 
     * @param userId 用户ID
     * @param activityId 活动ID
     */
    void deleteUserActivity(@Param("userId") Integer userId, @Param("activityId") Integer activityId);
    
    /**
     * 查询用户参与的所有活动
     * 
     * @param userId 用户ID
     * @return 活动列表
     */
    List<Activity> findActivitiesByUserId(Integer userId);
    
    /**
     * 创建新活动
     * 
     * @param activity 活动信息
     */
    void insertActivity(Activity activity);
    
    /**
     * 更新活动信息
     * 
     * @param activity 活动信息
     */
    void updateActivity(Activity activity);
    
    /**
     * 删除活动
     * 
     * @param activityId 活动ID
     */
    void deleteActivity(Integer activityId);
}
